This invention relates to integrated circuits and systems that share memory, and more particularly, to integrated circuits with adjustable initialization data memory addresses that are used when accessing initialization data in shared memory.
Electronic systems often contain integrated circuits with processing capabilities. Examples of integrated circuits with processing capabilities include microprocessors, microcontrollers, digital signal processors, certain application specific integrated circuits, and programmable logic devices.
When these integrated circuits are initialized, they typically are loaded with initialization data. For example, microprocessors are loaded with boot code upon initialization. The boot code provides the microprocessor with basic functionality, so that the microprocessor can undertake more complex system boot-up functions. For example, the boot code includes a basic set of instructions that allow the microprocessor to load and run application code.
As another example, programmable logic devices are initialized by loading configuration data. Once configuration data is loaded into configuration memory in a programmable logic device, the configuration memory generates static output signals that are applied to programmable logic. The states of the static output signals configure the programmable logic to perform desired custom logic functions.
Initialization data such as the boot code for microprocessors and the configuration data for programmable logic devices is stored in memory. When a system boots up, each integrated circuit retrieves its initialization data. In some system architectures, each integrated circuit retrieves its initialization data from a separate memory. For example, a microprocessor can retrieve its boot code from a read-only-memory chip and a programmable logic device can retrieve its configuration data from a specialized memory-based circuit called a configuration device.
In other system architectures, shared memory is available to system components. The use of shared memory reduces system cost and complexity, because initialization data such as boot code or programmable logic device configuration data may be stored on a large inexpensive memory device such as a flash memory. System designers must take care not to create memory address conflicts when using shared memory.
Some processors are available as “bottom-boot” or “top-boot” devices. A bottom-boot processor retrieves its boot code by starting at an address at the bottom of the memory's memory space and working towards the top (i.e., by successively incrementing the memory address from a starting address at the bottom of the memory space while reading the boot code from the memory). A top-boot processor retrieves its boot code by working from the top of the memory space towards the bottom. Processors are also available that can be configured to have different boot code addresses depending on which voltages are applied to some of their pins upon power-up.
Some memory addressing conflicts can be avoided using these approaches, but in systems with multiple devices, conflicts may become unavoidable unless the system designer avoids or reduces the use of shared memory.
It would therefore be desirable to provide integrated circuits that can be loaded with a desired initialization data memory address.